{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "mlp.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "id": "x1lvvYoqh_B8"
      },
      "source": [
        "import tensorflow as tf"
      ],
      "execution_count": 1,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NljIzKkyiBzz",
        "outputId": "8e5542ef-854f-4396-a017-2c392702d754",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "# Load MNIST data\n",
        "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()\n",
        "# Preprocessing\n",
        "x_train = x_train / 255.0\n",
        "x_test = x_test / 255.0\n",
        "# Track the data type\n",
        "dataType = x_train.dtype\n",
        "print(f\"Data type: {dataType}\")\n",
        "labelType = y_test.dtype\n",
        "print(f\"Data type: {labelType}\")"
      ],
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n",
            "11493376/11490434 [==============================] - 0s 0us/step\n",
            "Data type: float64\n",
            "Data type: uint8\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gMeQ7B8hiDPp",
        "outputId": "ef12890e-d3d1-43c2-d32c-dfc92133bde1",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 268
        }
      },
      "source": [
        "im_list = []\n",
        "n_samples_to_show = 16\n",
        "c = 0\n",
        "for i in range(n_samples_to_show):\n",
        "  im_list.append(x_train[i])\n",
        "# Visualization\n",
        "import matplotlib.pyplot as plt\n",
        "from mpl_toolkits.axes_grid1 import ImageGrid\n",
        "fig = plt.figure(figsize=(4., 4.))\n",
        "# Ref: https://matplotlib.org/3.1.1/gallery/axes_grid1/simple_axesgrid.html\n",
        "grid = ImageGrid(fig, 111,  # similar to subplot(111)\n",
        "                 nrows_ncols=(4, 4),  # creates 2x2 grid of axes\n",
        "                 axes_pad=0.1,  # pad between axes in inch.\n",
        "                 )\n",
        "# Show image grid\n",
        "for ax, im in zip(grid, im_list):\n",
        "    # Iterating over the grid returns the Axes.\n",
        "    ax.imshow(im, 'gray')\n",
        "plt.show()"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 288x288 with 32 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "u-_cXLqJiEgq",
        "outputId": "0d69795b-a262-458f-f5e8-885005740045",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "# Model building\n",
        "NUM_CLASSES = 10\n",
        "model = tf.keras.Sequential([\n",
        "    tf.keras.layers.Flatten(input_shape=(28, 28)),\n",
        "    tf.keras.layers.Dense(256, activation='relu'),\n",
        "    tf.keras.layers.Dense(NUM_CLASSES, activation='sigmoid')\n",
        "])\n",
        "\n",
        "# Compiling the model with the high-level keras\n",
        "model.compile(optimizer='adam',\n",
        "              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),\n",
        "              metrics=['accuracy'])\n",
        "\n",
        "# Model training\n",
        "model.fit(x_train, y_train, epochs=10)"
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.2459 - accuracy: 0.9304\n",
            "Epoch 2/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.1022 - accuracy: 0.9690\n",
            "Epoch 3/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.0701 - accuracy: 0.9789\n",
            "Epoch 4/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.0516 - accuracy: 0.9843\n",
            "Epoch 5/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.0389 - accuracy: 0.9880\n",
            "Epoch 6/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.0300 - accuracy: 0.9903\n",
            "Epoch 7/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.0227 - accuracy: 0.9930\n",
            "Epoch 8/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.0191 - accuracy: 0.9941\n",
            "Epoch 9/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.0138 - accuracy: 0.9958\n",
            "Epoch 10/10\n",
            "1875/1875 [==============================] - 4s 2ms/step - loss: 0.0140 - accuracy: 0.9956\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<tensorflow.python.keras.callbacks.History at 0x7f4308281f28>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "druwNSZQiGJi",
        "outputId": "70890649-f7d5-4472-e4af-b7c4a34adf10",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "eval_loss, eval_acc = model.evaluate(x_test,  y_test, verbose=1)\n",
        "print('Eval accuracy percentage: {:.2f}'.format(eval_acc * 100))\n"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "313/313 [==============================] - 0s 1ms/step - loss: 0.0882 - accuracy: 0.9781\n",
            "Eval accuracy percentage: 97.81\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "q5aSajJaiIaM"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}